package cn.zswltech.gruul.biz.service;

import cn.zswltech.gruul.biz.support.service.IService;
import cn.zswltech.gruul.common.dto.*;
import cn.zswltech.gruul.common.result.Response;
import cn.zswltech.gruul.common.entity.DisplayGroupDO;
import cn.zswltech.gruul.common.entity.RoleDO;

import java.util.List;
import java.util.Map;


public interface RoleService extends IService<RoleDO> {

    void deleteRoleMenuFunctions(Long roleId, Long menuId, String optType, Long functionId) throws Exception;

    /**
     * 查询应用下角色

     * @return
     */
    List<RoleDO> getRolesBySystemCode();


    /**
     * 创建角色
     * @param req 角色信息
     * @return
     */
    void createRole(RoleAddREQ req);

    /**
     * 建立角色拥有的菜单功能
     *
     * @param roleDO
     * @return
     */
    Response bandMenuFunction(RoleDO roleDO, Map<String, List<String>> mfs);

    /**
     * 获取或相应的菜单功能
     *
     * @param rdo
     * @return
     */
    Response<List<DisplayGroupDO>> getRuleMenuTrees(RoleDO rdo);


    /**
     * 修改角色
     * @param req 角色信息
     */
    void updateRuleById(RoleUpdateREQ req);

    /**
     * 根据机构组装菜单树
     *
     * @param orgId 机构id
     * @param menus   机构拥有的菜单
     * @param funcs   机构拥有的功能
     * @return
     */
    List<DisplayGroupDO> parseOrgMenuTree(Long orgId, List<Long> menus, List<Long> funcs, boolean orgFlag);



    void delete(RoleDelREQ  req);

    /**
     * 角色对应用户集合
     * @param req 角色集合
     * @return 用户集合
     */
    List<Role2UserInfo> getRole2Uers(Role2UserREQ req);

    /**
     * 查询角色绑定资源组
     * @param req 角色id
     * @return
     */
    RoleMenuResourceRSP queryRoleResource(RoleMenuResourceREQ req);
}
